Powershell scripts/Create AMA DCR for Security Events collection/Add-AMASecurityEventDCR.ps1 (139 lines of code) (raw):
param (
[Parameter(Mandatory = $true)]
[string]$DcrName,
[Parameter(Mandatory = $true)]
[string]$ResourceGroup,
[Parameter(Mandatory = $true)]
[string]$SubscriptionId,
[Parameter(Mandatory = $true)]
[string]$Region,
[Parameter(Mandatory = $true)]
[string]$LogAnalyticsWorkspaceARMId,
[Parameter(Mandatory = $false)]
[ValidateSet("AllEvents","Common","Minimal","Custom")]
[string]$EventFilter = "AllEvents",
[Parameter(Mandatory = $false)]
[string[]]$CustomEventFilter
)
$ctx = Get-AzContext
if ($null -eq $ctx) {
Write-Error "No Azure context found. Logging in to Azure..."
Connect-AzAccount -SubscriptionId $SubscriptionId
}
else
{
if (-not(Get-AzSubscription | Where-Object { $_.Id -eq $SubscriptionId })) {
Write-Error "Subscription $SubscriptionId not found in current Azure context. Logging in to Azure..."
Disconnect-AzAccount -Scope Process
Connect-AzAccount -SubscriptionId $SubscriptionId
}
}
if ($EventFilter -eq "Custom") {
if ([string]::IsNullOrEmpty($CustomEventFilter)) {
Write-Error "CustomEventFilter cannot be empty when EventFilter is set to Custom."
return
}
}
if (-not([string]::IsNullOrEmpty($CustomEventFilter))) {
if ($EventFilter -ne "Custom") {
Write-Error "CustomEventFilter can only be set when EventFilter is set to Custom."
return
}
}
switch ($EventFilter) {
"AllEvents" {
$xPathQueries = @(
"Security!*",
"Microsoft-Windows-AppLocker/EXE and DLL!*",
"Microsoft-Windows-AppLocker/MSI and Script!*"
)
}
"Common" {
$xPathQueries = @(
"Security!*[System[(EventID=1) or (EventID=299) or (EventID=300) or (EventID=324) or (EventID=340) or (EventID=403) or (EventID=404) or (EventID=410) or (EventID=411) or (EventID=412) or (EventID=413) or (EventID=431) or (EventID=500) or (EventID=501) or (EventID=1100)]]",
"Security!*[System[(EventID=1102) or (EventID=1107) or (EventID=1108) or (EventID=4608) or (EventID=4610) or (EventID=4611) or (EventID=4614) or (EventID=4622) or (EventID=4624) or (EventID=4625) or (EventID=4634) or (EventID=4647) or (EventID=4648) or (EventID=4649) or (EventID=4657)]]",
"Security!*[System[(EventID=4661) or (EventID=4662) or (EventID=4663) or (EventID=4665) or (EventID=4666) or (EventID=4667) or (EventID=4688) or (EventID=4670) or (EventID=4672) or (EventID=4673) or (EventID=4674) or (EventID=4675) or (EventID=4689) or (EventID=4697) or (EventID=4700)]]",
"Security!*[System[(EventID=4702) or (EventID=4704) or (EventID=4705) or (EventID=4716) or (EventID=4717) or (EventID=4718) or (EventID=4719) or (EventID=4720) or (EventID=4722) or (EventID=4723) or (EventID=4724) or (EventID=4725) or (EventID=4726) or (EventID=4727) or (EventID=4728)]]",
"Security!*[System[(EventID=4729) or (EventID=4733) or (EventID=4732) or (EventID=4735) or (EventID=4737) or (EventID=4738) or (EventID=4739) or (EventID=4740) or (EventID=4742) or (EventID=4744) or (EventID=4745) or (EventID=4746) or (EventID=4750) or (EventID=4751) or (EventID=4752)]]",
"Security!*[System[(EventID=4754) or (EventID=4755) or (EventID=4756) or (EventID=4757) or (EventID=4760) or (EventID=4761) or (EventID=4762) or (EventID=4764) or (EventID=4767) or (EventID=4768) or (EventID=4771) or (EventID=4774) or (EventID=4778) or (EventID=4779) or (EventID=4781)]]",
"Security!*[System[(EventID=4793) or (EventID=4797) or (EventID=4798) or (EventID=4799) or (EventID=4800) or (EventID=4801) or (EventID=4802) or (EventID=4803) or (EventID=4825) or (EventID=4826) or (EventID=4870) or (EventID=4886) or (EventID=4887) or (EventID=4888) or (EventID=4893)]]",
"Security!*[System[(EventID=4898) or (EventID=4902) or (EventID=4904) or (EventID=4905) or (EventID=4907) or (EventID=4931) or (EventID=4932) or (EventID=4933) or (EventID=4946) or (EventID=4948) or (EventID=4956) or (EventID=4985) or (EventID=5024) or (EventID=5033) or (EventID=5059)]]",
"Security!*[System[(EventID=5136) or (EventID=5137) or (EventID=5140) or (EventID=5145) or (EventID=5632) or (EventID=6144) or (EventID=6145) or (EventID=6272) or (EventID=6273) or (EventID=6278) or (EventID=6416) or (EventID=6423) or (EventID=6424) or (EventID=8001) or (EventID=8002)]]",
"Security!*[System[(EventID=8003) or (EventID=8004) or (EventID=8005) or (EventID=8006) or (EventID=8007) or (EventID=8222) or (EventID=26401) or (EventID=30004)]]",
"Microsoft-Windows-AppLocker/EXE and DLL!*[System[(EventID=8001) or (EventID=8002) or (EventID=8003) or (EventID=8004)]]",
"Microsoft-Windows-AppLocker/MSI and Script!*[System[(EventID=8005) or (EventID=8006) or (EventID=8007)]]"
)
}
"Minimal" {
$xPathQueries = @(
"Security!*[System[(EventID=1102) or (EventID=4624) or (EventID=4625) or (EventID=4657) or (EventID=4663) or (EventID=4688) or (EventID=4700) or (EventID=4702) or (EventID=4719) or (EventID=4720) or (EventID=4722) or (EventID=4723) or (EventID=4724) or (EventID=4727) or (EventID=4728)]]",
"Security!*[System[(EventID=4732) or (EventID=4735) or (EventID=4737) or (EventID=4739) or (EventID=4740) or (EventID=4754) or (EventID=4755) or (EventID=4756) or (EventID=4767) or (EventID=4799) or (EventID=4825) or (EventID=4946) or (EventID=4948) or (EventID=4956) or (EventID=5024)]]",
"Security!*[System[(EventID=5033) or (EventID=8222)]]",
"Microsoft-Windows-AppLocker/EXE and DLL!*[System[(EventID=8001) or (EventID=8002) or (EventID=8003) or (EventID=8004)]]",
"Microsoft-Windows-AppLocker/MSI and Script!*[System[(EventID=8005) or (EventID=8006) or (EventID=8007)]]"
)
}
"Custom" {
$xPathQueries = @($CustomEventFilter)
}
Default {}
}
Write-Output "Getting Log Analytics Workspace Id..."
$response = Invoke-AzRestMethod -Method GET -Uri "https://management.azure.com/$($LogAnalyticsWorkspaceARMId)?api-version=2021-12-01-preview"
if ($response.StatusCode -ne 200) {
Write-Error "Failed to get Log Analytics Workspace Id. Error: $($response.Content)"
return
}
$logAnalyticsWorkspaceId = ($response.Content | ConvertFrom-Json).properties.customerId
Write-Output "Log Analytics Workspace Id: $($logAnalyticsWorkspaceId)"
$body = @'
{
"properties": {
"dataSources": {
"windowsEventLogs": [
{
"streams": [
"Microsoft-SecurityEvent"
],
"xPathQueries": [ <XPath Queries> ],
"name": "eventLogsDataSource"
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "<Log Analytics Workspace ARM Id>",
"workspaceId": "<Log Analytics Workspace Id>",
"name": "DataCollectionEvent"
}
]
},
"dataFlows": [
{
"streams": [
"Microsoft-SecurityEvent"
],
"destinations": [
"DataCollectionEvent"
]
}
]
},
"location": "<Azure Region>",
"tags": {
},
"kind": "Windows"
}
'@
$body = $body.Replace("<XPath Queries>", '"' + ($xPathQueries -join '","') + '"')
$body = $body.Replace("<Log Analytics Workspace ARM Id>", $LogAnalyticsWorkspaceARMId)
$body = $body.Replace("<Log Analytics Workspace Id>", $logAnalyticsWorkspaceId)
$body = $body.Replace("<Azure Region>", $Region)
Write-Output "Creating AMA DCR for Security Events collection..."
$response = Invoke-AzRestMethod -Method PUT -Payload $body -Uri "https://management.azure.com/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroup/providers/microsoft.insights/dataCollectionRules/$($DcrName)?api-version=2021-09-01-preview"
if (-not($response.StatusCode -in (200,201))) {
Write-Error "Failed to create AMA DCR for Security Events collection. Error: $($response.Content)"
return
}
Write-Output "AMA DCR for Security Events collection created successfully."